package com.ruoyi.common.base.service;

import com.github.pagehelper.PageInfo;
import com.ruoyi.common.base.domain.model.BatchSyncResult;
import com.ruoyi.common.core.constant.HttpStatus;
import com.ruoyi.common.core.utils.PageUtils;
import com.ruoyi.common.core.web.page.TableDataInfo;

import java.io.Serializable;
import java.util.List;

/**
 * @author cx
 * @date 2023/6/8
 * @apiNote
 */
public interface BaseService<T> {
    /**
     * 根据id查询
     *
     * @param t
     */

    /**
     * 设置请求分页数据
     */
    default void startPage() {
        PageUtils.startPage();
    }

    /**
     * 清理分页的线程变量
     */
    default void clearPage() {
        PageUtils.clearPage();
    }

    /**
     * 响应请求分页数据
     */
    @SuppressWarnings({"rawtypes", "unchecked"})
    default TableDataInfo getDataTable(List<?> list) {
        TableDataInfo rspData = new TableDataInfo();
        rspData.setCode(HttpStatus.SUCCESS);
        rspData.setRows(list);
        rspData.setMsg("查询成功");
        rspData.setTotal(new PageInfo(list).getTotal());
        return rspData;
    }

    T selectById(Serializable id);


    /**
     * 根据多个id查询
     *
     * @param id 标识ID 可以是自增长ID，也可以是唯一标识。
     */
    List<T> selectByIds(Serializable ids);

    /**
     * 根据对象查询
     *
     * @param t
     */
    List<T> selectList(T t);

    /**
     * 插入数据
     *
     * @param id 标识ID 可以是自增长ID，也可以是唯一标识。
     * @return
     */
    int insert(T t);

    /**
     * 更新数据
     *
     * @param id 标识ID 可以是自增长ID，也可以是唯一标识。
     * @return
     */

    int update(T t);

    /**
     * 删除数据
     *
     * @param id 标识ID 可以是自增长ID，也可以是唯一标识。
     * @return
     */
    int delete(Serializable id);

    /**
     * 根据多个ID删除数据
     *
     * @param id 标识ID 可以是自增长ID，也可以是唯一标识。
     * @return
     */

    int deleteByIds(String[] ids);


    /**
     * 根据多个ID删除数据
     *
     * @param id 标识ID 可以是自增长ID，也可以是唯一标识。
     * @return
     */

    int deleteByIds(Long[] ids);


}
